/**
 * @file musique.h
 * @brief Fichier d'entête du module musique.
 *
 * @author Rachid Delory, Mamadou Keita, Florian Bernard
 */

#ifndef H_MUSIQUE_H
#define H_MUSIQUE_H

/* *********************************************************************

                       Librairies de musique                           

********************************************************************* */

#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
#include "temps.h"
#include "utilitaireString.h"

/* *********************************************************************

                        Définitions de types                           

********************************************************************* */

/**
 * @struct sMusique
 * @brief Structure utilisée pour la gestion des Musique
 *
 * Cette structure est utilisée pour gérer un Musique. Les champs de cette structure doivent être modifiés ou lus par les accesseurs et mutateurs. Ils doivent être initialisés et libérés avec les fonctions prévus à cette effet
 */
struct sMusique {
	int id; /** */
	int piste; /** */
	Temps * duree; /** */
	char * paroles; /** */
  char maj;
  char sup;
};
/**
 * @typedef Musique
 * @brief Redéfinit la structure sMusique
 */
	typedef struct sMusique Musique;
/* *********************************************************************

           Fonctions de la structure Musique               

********************************************************************* */

/**
 * @fn void init_Mus(Musique * ptr) ;
 * @brief initialise une miusique en mémoire
 *
 * @param[in,out] ptr pointeur vers Musique
 * @return int
 */
void init_Mus(Musique *ptr);

/**
 * @fn void liberer_Mus(Musique * ptr) ;
 * @brief libère une miusique en mémoire
 *
 * @param[in,out] ptr pointeur vers Musique
 * @return int
 */
void liberer_Mus(Musique *ptr);

/**
 * @fn Musique *creer_Mus() ;
 * @brief cree une miusique en mémoire
 *
 * @param[in,out] ptr pointeur vers Musique
 * @return int
 */
Musique *creer_Mus();

/**
 * @fn void detruire_Mus(Musique **musique) ;
 * @brief detruit une miusique en mémoire
 *
 * @param[in,out] ptr pointeur vers Musique
 * @return int
 */
void detruire_Mus(Musique **musique);

/**
 * @fn void copier_Mus(Musique **dest, const Musique *src);
 * @brief Copier la musique src dans la musique dest
 *
 * @param[in,out] dest
 * @param src
 */
void copier_Mus(Musique **dest, const Musique *src);
/* *********************************************************************

           Accesseurs et Mutateurs de la structure Musique               

********************************************************************* */

/**
 * @fn int getId_Mus(const Musique * ptr) ;
 * @brief 
 *
 * @param ptr pointeur vers Musique
 * @return int
 */
int getId_Mus(const Musique * ptr) ;

/**
 * @fn void setId_Mus(Musique *ptr, const int val) ;
 * @brief Modifie .
 *
 * @param[in,out] ptr Pointeur vers Musique.
 * @param val.
 */
void setId_Mus(Musique *ptr, const int val) ;

/**
 * @fn int getPiste_Mus(const Musique * ptr) ;
 * @brief 
 *
 * @param ptr pointeur vers Musique
 * @return int
 */
int getPiste_Mus(const Musique * ptr) ;

/**
 * @fn void setPiste_Mus(Musique *ptr, const int val) ;
 * @brief Modifie .
 *
 * @param[in,out] ptr Pointeur vers Musique.
 * @param val.
 */
void setPiste_Mus(Musique *ptr, const int val) ;

/**
 * @fn Temps * getDuree_Mus(const Musique * ptr) ;
 * @brief 
 *
 * @param ptr pointeur vers Musique
 * @return Temps
 */
Temps * getDuree_Mus(const Musique * ptr) ;

/**
 * @fn void setDuree_Mus(Musique *ptr, const Temps * val) ;
 * @brief Modifie .
 *
 * @param[in,out] ptr Pointeur vers Musique.
 * @param val.
 */
void setDuree_Mus(Musique *ptr, const Temps * val) ;

/**
 * @fn char * getParoles_Mus(const Musique * ptr) ;
 * @brief 
 *
 * @param ptr pointeur vers Musique
 * @return char *
 */
char * getParoles_Mus(const Musique * ptr) ;

/**
 * @fn void setParoles_Mus(Musique *ptr, const char * val) ;
 * @brief Modifie .
 *
 * @param[in,out] ptr Pointeur vers Musique.
 * @param val.
 */
void setParoles_Mus(Musique *ptr, const char * val) ;

/**
 * @fn void setMaj_Mus(Musique *ptr, const char b);
 * @brief Set le besoin de faire une mise à jour, ou pas
 * 
 * @param[in,out] ptr
 * @parm b
 */
void setMaj_Mus(Musique *ptr, const char b);

/**
 * @fn char getMaj_Mus(const Musique *ptr);
 * @brief Retourne 0 si pas besoin de faire la mise à jour, et 1 sinon
 *
 * @param ptr
 * @return Comme un boolean
 */
char getMaj_Mus(const Musique *ptr);

/**
 * @fn void setSup_Mus(Musique *ptr, const char b);
 * @brief Set le besoin de le supprimer, ou pas
 * 
 * @param[in,out] ptr
 * @parm b
 */
void setSup_Mus(Musique *ptr, const char b);

/**
 * @fn char getSup_Mus(const Musique *ptr);
 * @brief Retourne 0 si pas besoin de le supprimer, et 1 sinon
 *
 * @param ptr
 * @return Comme un boolean
 */
char getSup_Mus(const Musique *ptr);

#endif
